﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using br.com.SistemaChamados.Enum;
using br.com.SistemaChamados.Model;
using br.com.SistemaChamados.DAO;
using System.Data;

namespace br.com.SistemaChamados.Controller
{
    public class PlaceController
    {
        /// <summary>
        /// Método responsável por atualizar uma localidade
        /// </summary>
        /// <param name="place">A localidade a ser atualizada, já com as novas informações</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState UpdatePlace(Place place)
        {
            EnumCRUDState resultPlace = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultPlace = PlaceDAO.UpdatePlace(place);
            }
            catch (Exception ex)
            {
                resultPlace = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultPlace;
        }

        /// <summary>
        /// Método responsável por listar todas as localidades
        /// </summary>
        /// <returns>List - Place</returns>
        public List<Place> GetPlaces()
        {
            List<Place> listPlace = null;
            try
            {
                listPlace = PlaceDAO.GetPlaces();
                if (listPlace != null)
                {
                    return listPlace;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }

        /// <summary>
        /// Método responsável por recuperar uma localidade desejada
        /// </summary>
        /// <param name="placeId">Id da localidade desejada</param>
        /// <returns>Place</returns>
        public Place GetPlace(int placeId)
        {
            Place resultPlace = null;
            try
            {
                resultPlace = PlaceDAO.GetPlace(placeId);
                if (resultPlace != null)
                {
                    return resultPlace;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }

        /// <summary>
        /// Método responsável por remover uma localidade
        /// </summary>
        /// <param name="place">A localidade a ser removida</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState DeletePlace(Place place)
        {
            EnumCRUDState resultPlace = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultPlace = PlaceDAO.DeletePlace(place);
            }
            catch (Exception ex)
            {
                resultPlace = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultPlace;
        }

        /// <summary>
        /// Método responsável por inserir uma localidade
        /// </summary>
        /// <param name="place">A localidade a ser inserida</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState InsetPlace(Place place)
        {
            EnumCRUDState resultPlace = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultPlace = PlaceDAO.InsertPlace(place);
            }
            catch (Exception ex)
            {
                resultPlace = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultPlace;
        }

        /// <summary>
        /// Método resposável por recuperar as localidades de uma determinada cidade
        /// </summary>
        /// <param name="city">A cidade da qual se deseja obter as localidades</param>
        /// <returns>List - Place</returns>
        public List<Place> GetPlacesByCity(City city)
        {
            List<Place> listPlace = null;
            try
            {
                listPlace = PlaceDAO.GetPlacesByCity(city);
                if (listPlace != null)
                {
                    return listPlace;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }

        public PlaceController()
        {
            
        }
    }
}